|
ARD2
1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
|
00001 00017 #ifndef CRC_H_ 00018 #define CRC_H_ 00019 00020 /* 00021 ************************************************************** 00022 * Defines, Macros and Typedefs 00023 **************************************************************/ 00024 /*** Constant Macros ***/ 00025 /* Default Yes and No defines */ 00026 #ifndef TRUE 00027 #define TRUE (1u) 00028 #endif 00029 #ifndef CLEAR 00030 #define CLEAR (0u) 00031 #endif 00032 #ifndef BITS_IN_NIBBLE 00033 #define BITS_IN_NIBBLE (4u) 00034 #endif 00035 #ifndef BITS_IN_BYTE 00036 #define BITS_IN_BYTE (8u) 00037 #endif 00038 #ifndef BYTES_IN_16 00039 #define BYTES_IN_16 (2u) 00040 #endif 00041 #ifndef BYTES_IN_32 00042 #define BYTES_IN_32 (4u) 00043 #endif 00044 00045 #ifndef BIT_DEFINITION 00046 #define BIT_DEFINITION 00047 #define BIT0 (1u << 0u) 00048 #define BIT1 (1u << 1u) 00049 #define BIT2 (1u << 2u) 00050 #define BIT3 (1u << 3u) 00051 #define BIT4 (1u << 4u) 00052 #define BIT5 (1u << 5u) 00053 #define BIT6 (1u << 6u) 00054 #define BIT7 (1u << 7u) 00055 #define BIT8 (1u << 8u) 00056 #define BIT9 (1u << 9u) 00057 #define BIT10 (1u << 10) 00058 #define BIT11 (1u << 11) 00059 #define BIT12 (1u << 12) 00060 #define BIT13 (1u << 13) 00061 #define BIT14 (1u << 14) 00062 #define BIT15 (1u << 15) 00063 #define BIT16 (1u << 16) 00064 #define BIT17 (1u << 17) 00065 #define BIT18 (1u << 18) 00066 #define BIT19 (1u << 19) 00067 #define BIT20 (1u << 20) 00068 #define BIT21 (1u << 21) 00069 #define BIT22 (1u << 22) 00070 #define BIT23 (1u << 23) 00071 #define BIT24 (1u << 24) 00072 #define BIT25 (1u << 25) 00073 #define BIT26 (1u << 26) 00074 #define BIT27 (1u << 27) 00075 #define BIT28 (1u << 28) 00076 #define BIT29 (1u << 29) 00077 #define BIT30 (1u << 30) 00078 #define BIT31 (1u << 31) 00079 #endif 00080 00081 /* Instance list */ 00082 #define CRC_INSTANCE_0 0x00u 00083 #define CRC_INSTANCE_1 0x01u 00084 00085 /* Masks for CRCConfig_t */ 00086 #define CRC_INSTANCE_0_MASK 0x00u 00087 #define CRC_INSTANCE_1_MASK 0x10u 00088 #define CRC_CCITT 0x00u 00089 #define CRC_32 0x04u 00090 #define CRC_NO_MSB_SWAP 0x00u 00091 #define CRC_MSB_SWAP 0x02u 00092 #define CRC_NO_RESULT_INV 0x00u 00093 #define CRC_RESULT_INV 0x01u 00094 00095 /* DMA Channels occupied by this fn. */ 00097 #define CRC_DMA_CH_0 (10u) 00098 00099 #define CRC_DMA_CH_1 (11u) 00100 00101 /*** Function Macros ***/ 00102 #ifndef N_ELEMENTS 00103 #define N_ELEMENTS(X) (sizeof(X)/sizeof(*(X))) 00104 #endif 00105 00106 /* Where XX = pu32StartAddress, YY = u32NoOfWords, ZZ = pu32Result */ 00107 #define CRC32_0(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, 0xFFFFFFFFu, \ 00108 CRC_DMA_CH_0, CRC_0_32) 00109 #define CRC32_1(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, 0xFFFFFFFFu, \ 00110 CRC_DMA_CH_1, CRC_1_32) 00111 #define CCITT_0(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, CLEAR, CRC_DMA_CH_0, \ 00112 CRC_0_CCITT) 00113 #define CCITT_1(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, CLEAR, CRC_DMA_CH_1, \ 00114 CRC_1_CCITT) 00115 00116 /*** Enums ***/ 00117 enum DEFAULT_CRC_CONFIG_INDECES 00118 { 00119 CRC_0_CCITT = 0, CRC_1_CCITT, CRC_0_32, CRC_1_32 00120 }; 00121 00122 /*** TypeDefs ***/ 00123 typedef union 00124 { 00125 struct 00126 { 00127 vuint8_t Instance: 4; 00128 vuint8_t Unused: 1; 00129 vuint8_t Polyg: 1; 00130 vuint8_t Swap: 1; 00131 vuint8_t Inv: 1; 00132 }P; 00133 vuint8_t A; 00134 } CRCConfig_t; 00135 /* 00136 ************************************************************** 00137 * Declarations 00138 **************************************************************/ 00139 /*** Global ***/ 00140 00141 /*** Static ***/ 00142 00143 /*** Constant ***/ 00144 /* 00145 ************************************************************** 00146 * Function Prototypes 00147 **************************************************************/ 00148 /* 00149 ****************************************************************************** 00150 * 00151 * Function: vfnInitCRC 00152 * 00153 */ 00162 void vfnInitCRC(uint8_t u8Instance, uint32_t u32Remainder); 00163 /* 00164 ****************************************************************************** 00165 * 00166 * Function: u8fnCRC 00167 * 00168 */ 00185 uint8_t u8fnCRC(const uint8_t* pu8StartAddress, 00186 const uint32_t u32NOfBytes, 00187 uint32_t* pu32Result, 00188 const uint32_t u32Remainder, 00189 const uint8_t u8DMAChannel, 00190 const uint8_t u8CRCConfig); 00191 /* 00192 ****************************************************************************** 00193 * 00194 * Function: vfnCRCConfig 00195 * 00196 */ 00203 static void vfnCRCConfig(CRCConfig_t tConfig); 00204 /* 00205 ****************************************************************************** 00206 * 00207 * Function: vfnCRCConfigDMA 00208 * 00209 */ 00220 static void vfnCRCConfigDMA(const uint8_t* pu8StartAddress, 00221 const uint32_t u32NOfBytes, 00222 const uint8_t u8DMAChannel, 00223 const CRCConfig_t tCRCConfig); 00224 /* 00225 ****************************************************************************** 00226 * 00227 * Function: vfnCRCIsr 00228 * 00229 */ 00238 static void vfnCRCIsr(uint8_t u8Instance); 00239 /* 00240 ****************************************************************************** 00241 * 00242 * Function: vfnCRC0Isr 00243 * 00244 */ 00251 void vfnCRC0Isr(void); 00252 /* 00253 ****************************************************************************** 00254 * 00255 * Function: vfnCRC1Isr 00256 * 00257 */ 00264 void vfnCRC1Isr(void); 00265 #endif /* CRC_H_ */